
package org.apache.solr.search;

import java.io.IOException;
import java.util.Set;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Weight;

/** A simple query that wraps another query and implements ExtendedQuery. */
public class WrappedQuery extends ExtendedQueryBase {

    private Query q;

    public WrappedQuery(Query q) {
        this.q = q;
    }

    public Query getWrappedQuery() {
        return q;
    }

    public void setWrappedQuery(Query q) {
        this.q = q;
    }

    @Override
    public void setBoost(float b) {
        q.setBoost(b);
    }

    @Override
    public float getBoost() {
        return q.getBoost();
    }

    @Override
    public Weight createWeight(IndexSearcher searcher) throws IOException {
        return q.createWeight(searcher);
    }

    @Override
    public Query rewrite(IndexReader reader) throws IOException {
        // currently no need to continue wrapping at this point.
        return q.rewrite(reader);
    }

    @Override
    public void extractTerms(Set<Term> terms) {
        q.extractTerms(terms);
    }

    @Override
    public WrappedQuery clone() {
        WrappedQuery newQ = (WrappedQuery) super.clone();
        newQ.q = (Query) q.clone();
        return newQ;
    }

    @Override
    public int hashCode() {
        return q.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof WrappedQuery) {
            return this.q.equals(((WrappedQuery) obj).q);
        }
        return q.equals(obj);
    }

    @Override
    public String toString(String field) {
        return getOptions() + q.toString();
    }
}
